/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.actions.dispositivos;


import com.mapping.Dispositivo;
import com.opensymphony.xwork2.ActionSupport;
import static com.opensymphony.xwork2.Action.SUCCESS;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

/**
 *
 * @author Andres
 */
@Namespace(value="/")
@Action(value="buscarDispositivos", results={@Result(name="success",location="/GestionDispositivos/gestionDispositivos.jsp")})
public class BuscarDispositivosAction extends ActionSupport{
    private List<DispositivoDetalle> listaDispositivo;
    private String buscar;
    
    @Override
    public String execute(){
        String consulta = "select d.IDDISP,d.NOSERIE,d.LOCALIZACION,d.ESTADO,d.IDMODELO from dispositivo d"
                + " left join modelo m on (d.idModelo = m.idModelo) left join marca ma on (m.idMarca = ma.idMarca)"
                + " left join tipo_disp td on (m.idTipo=td.idTipo) left join depa_disp dd on (dd.idDisp=d.idDisp)"
                + " left join departamento de on (dd.idDepartamento=de.idDepartamento)"
                + " where match (d.idDisp,d.noserie,d.localizacion,d.estado) against (?1 IN BOOLEAN MODE)"
                + " or match (m.modelo,m.descripcion) against (?1 IN BOOLEAN MODE)" 
                + " or match (ma.marca) against (?1 IN BOOLEAN MODE)"
                + " or match (td.tipo) against (?1 IN BOOLEAN MODE)"
                + " or match (de.nombre,de.descripcion,de.localizacion) against (?1 IN BOOLEAN MODE)"; 
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("inventarios");
        EntityManager em = emf.createEntityManager();
        EntityTransaction tx = em.getTransaction();
        tx.begin();
        List<Dispositivo> dispositivos;
        if(buscar== null || buscar.equals("")){
            dispositivos = (List<Dispositivo>) em.createNamedQuery("Dispositivo.findAll").getResultList();
        }else{
            Query query =  em.createNativeQuery(consulta,Dispositivo.class);
            query.setParameter(1,buscar);
            dispositivos = (List<Dispositivo>) query.getResultList();
        }
        listaDispositivo = new ArrayList<DispositivoDetalle>();
        for(Dispositivo d: dispositivos){
            listaDispositivo.add(ListaDispositivos.getDispositivoDetalle(d));
        }

        tx.commit();
        em.close();
        
        return SUCCESS;
    }

    public List<DispositivoDetalle> getListaDispositivo() {
        return listaDispositivo;
    }

    public void setBuscar(String buscar) {
        this.buscar = buscar;
    }
    
}